#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "calfunc.h"
#define MAX_BUF 1024


t_cpuinfo *get_cpu(int interval)
{
	static t_cpuinfo cpuinfo;
	char buf[MAX_BUF];
        static unsigned int USER[2],NICE[2],SYS[2],IDLE[2],IOWAIT[2],IRQ[2],SIRQ[2],TOTAL[2];
	FILE *fp;
//	// first read;
//	fp=fopen("/proc/stat", "r");
//	if(fp==NULL)
//	{
//		perror("File Open:");
//		return NULL;
//	}
//	while(fgets(buf, MAX_BUF, fp))
//	{
//		if(sscanf(buf, "cpu%u%u%u%u%u%u%u",&USER[0],&NICE[0],&SYS[0],&IDLE[0],&IOWAIT[0],&IRQ[0],&SIRQ[0]) > 0)
//			break;
//	}
//	sleep(interval);
//	// Must close file
//	fclose(fp);
        USER[0]=USER[1];
        NICE[0]=NICE[1];
        SYS[0]=SYS[1];
        IDLE[0]=IDLE[1];
        IOWAIT[0]=IOWAIT[1];
        IRQ[0]=IRQ[1];
        SIRQ[0]=SIRQ[1];

	// Second read
	fp=fopen("/proc/stat", "r");
	if(fp==NULL)
	{
		perror("File Open:");
		return NULL;
	}
	while(fgets(buf, MAX_BUF, fp))
	{
		if(sscanf(buf, "cpu%u%u%u%u%u%u%u",&USER[1],&NICE[1],&SYS[1],&IDLE[1],&IOWAIT[1],&IRQ[1],&SIRQ[1]) > 0)
			break;
	}
	fclose(fp);
	// Calculate 
	TOTAL[0]=USER[0]+NICE[0]+SYS[0]+IDLE[0]+IOWAIT[0]+IRQ[0]+SIRQ[0];
	TOTAL[1]=USER[1]+NICE[1]+SYS[1]+IDLE[1]+IOWAIT[1]+IRQ[1]+SIRQ[1];
	cpuinfo.user=100*(USER[1]-USER[0]+0.0)/(TOTAL[1]-TOTAL[0]);
	cpuinfo.nice=100*(NICE[1]-NICE[0]+0.0)/(TOTAL[1]-TOTAL[0]);
	cpuinfo.sys=100*(SYS[1]-SYS[0]+0.0)/(TOTAL[1]-TOTAL[0]);
	cpuinfo.idle=100*(IDLE[1]-IDLE[0]+0.0)/(TOTAL[1]-TOTAL[0]);
	cpuinfo.iowait=100*(IOWAIT[1]-IOWAIT[0]+0.0)/(TOTAL[1]-TOTAL[0]);
	return &cpuinfo;
}

//int main()
//{
//	t_cpuinfo *cpuinfo;
//	while(1)
//	{
//		cpuinfo = get_cpu(1);
//		// Get cpuinfo success
//		if(cpuinfo != NULL)
//		{
//			printf("user:%.2f\n",cpuinfo->user);
//			printf("nice:%.2f\n",cpuinfo->nice);
//			printf("sys:%.2f\n",cpuinfo->sys);
//			printf("idle:%.2f\n",cpuinfo->idle);
//			printf("wait:%.2f\n\n",cpuinfo->iowait);
//		}
//	}
//	return 0;
		
//}
